package com.xinqi.modules.chat.chat.friend.manager;

import com.xinqi.common.mybatis.data.service.BaseService;
import com.xinqi.modules.chat.chat.friend.domain.ChatFriendEntity;
import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendListQueryDTO;
import com.xinqi.modules.chat.chat.friend.dto.rsp.*;
import com.xinqi.modules.chat.chat.group.dto.req.ConversationSelectDTO;
import com.xinqi.modules.chat.chat.group.dto.req.GroupUserFriendQueryDTO;
import com.xinqi.modules.chat.chat.group.dto.rsp.ConversationResultDTO;
import com.xinqi.modules.chat.chat.group.dto.rsp.GroupUserFriendResultDTO;

import java.util.List;

/**
 * 好友列表管理层
 *
 * @author: system
 * @date: 2023/01/12
 */
public interface ChatFriendManager extends BaseService<ChatFriendEntity> {

    /**
     * 获取好友列表集合
     *
     * @param query ChatFriendListQueryDTO
     * @return List
     */
    List<ChatFriendDetailsResultDTO> findFriendList(ChatFriendListQueryDTO query);

    /**
     * 获取好友详情（包含物理删除数据）
     *
     * @param userId   用户Id
     * @param friendId 好友Id
     * @return ChatFriendDetailsResultDTO
     */
    ChatFriendDetailsResultDTO findFriendDetail(Long userId, Long friendId);

    /**
     * 通过用户id和好友id查询详情（包含物理删除数据）
     *
     * @param userId
     * @param friendId
     * @return
     */
    ChatFriendEntity friedByUserIdFriendId(Long userId, Long friendId);

    /**
     * 查询黑名单列表
     *
     * @param query
     * @return
     */
    List<ChatFriendBlackListDto> blacklist(ChatFriendBlackListDto query);

    /**
     * 好友汇总列表只包含头像名称和会话ID
     *
     * @param dto
     * @return
     */
    List<ConversationResultDTO> selectConversation(ConversationSelectDTO dto);

    /**
     * 查询非群员的好友
     *
     * @param dto
     * @return
     */
    List<GroupUserFriendResultDTO> groupUserFriend(GroupUserFriendQueryDTO dto);

    /**
     * 查询用户的黑名单数量
     *
     * @param userId
     * @return
     */
    Long selectCountBlack(Long userId);

    /**
     * 查询用户的好友数量
     *
     * @param userId
     * @return
     */
    Long selectCountFriend(Long userId);

    /**
     * 获取用户信息，与是否是好友
     *
     * @param dto
     * @return
     */
    List<ChatFriendInfoResultDTO> userInfoByUserId(ChatFriendListQueryDTO dto);

    /**
     * 检查是否是好友
     *
     * @param userId
     * @param friendId
     * @return
     */
    ChatFriendResultDTO friedCheck(Long userId, Long friendId);

    /**
     * 校验助手已绑定当前正用户信息
     */
    FriendAssistantCurrentDTO checkCurrentAssistant();

}
